// satisfies --- TS4.9
// 类型检查
// 和类型断言as功能比较类型，但是比类型断言更加安全也更加智能，因为他能在满足类型安全的前提下，自动帮我们做类型收窄和类型提示

interface IConfig{
  a: string | number;
}

// const legacy: IConfig = {};
// console.log(legacy.a)

// const legacyAs = {} as IConfig;
// console.log(legacyAs.a);

// 如果类型不安全，通过satisfies转换会提示错误
// const current = {} satisfies IConfig;
// 调用也会报错
// console.log(current.a);

// const currentWithValue:IConfig = { a: 2 };
// currentWithValue.a.toFixed() //error 类型string | number 不存在toFixed

// const currentWithValue = { a: 2 } as IConfig;
// currentWithValue.a.toFixed(); //error 类型string | number 不存在toFixed

const currentWithValue = { a: 2 } satisfies IConfig;
currentWithValue.a.toFixed();


type MyElement = {
  tagName: string;
  src: string;
  [key: string]: any;
}

/* const element = {
  tagName: "img",
  src: "https://www.baidu.com/img",
  alt: "Example Image"
} as MyElement

console.log(element.alt); //没有类型提示 */

const element = {
  tagName: "img",
  src: "https://www.baidu.com/img",
  alt: "Example Image"
} satisfies MyElement

console.log(element.alt); 